<?php
// 文件处理函数

/***********************************  文件下载 ****************************/
/**
 * 文件路径
 */
function download_file($path){
	
	$pathinfo = pathinfo($path);
	
	header('Content-Type: application/'.$pathinfo['extension']);

	header('Content-Disposition: attachment; filename="'.$pathinfo['basename'].'"');

	readfile($path);
}



/***********************************  文件上传 ****************************/
// 文件上传
// ['insertid'=>$insertID, 'savepath'=>$save_path]
function execute_file($file, $is_abs = false){
	
    if (upload_status($file) && upload_ext_vali($file) &&
		upload_type_vali($file) && upload_size_limit($file)) {

		
		// 检测是否已经有该文件了
		$datas = array();
		$fmd5  = md5_file($file['tmp_name']);
		$sql   = "SELECT fid,fpath FROM `uploadfile_tb` WHERE fmd5='{$fmd5}' LIMIT 1;";
        $result= my_mysql_query($sql, $datas);
		if ( $result !== false && count($datas)){
			return ['insertid'=>$datas[0]['fid'], 'savepath'=>$datas[0]['fpath']];
		}

		// 保存到本地目录
		$save_path = upload_save($file, true);
		if ($save_path === false){
			var_dump('保存文件失败');
			return false;
		}
		
		// 保存到数据库
		$name  = $file['name'];
		$type  = $file['type'];
		$fsize = $file['size'];
		$relat = substr($save_path, strlen(rtrim(UPLOAD_DIR,'/').'/'));
		$sql   = "INSERT INTO `uploadfile_tb`(fid, fpath, size, type, name, fmd5)";
		$sql  .= " VALUES(null, '{$relat}', {$fsize}, '{$type}', '{$name}', '{$fmd5}');";
		$insID = -1;
		if (!my_mysql_query($sql, $arr, $insID) && $inertID != -1){
			var_dump('保存头像到数据库失败');
			return false;
		}
		$info['insertid'] = $insID;
		if ($is_abs)
			$info['savepath'] = $save_path;
		else
			$info['savepath'] = $relat;
		
        return $info;
    }
    return false;
}

// 定义文件大小限制
defined('FILE_SIZE_LIMIT') || define('FILE_SIZE_LIMIT', 20 * 1024 * 1024);
// 定义文件类型
$file_type = ['image/png','image/gif','image/jpg','image/jpe','image/jpeg'];
// 文件后缀
$file_exts = ['png', 'gif', 'jpg', 'jpe', 'jpeg'];

// 状态
function upload_status($file){
    if ($file['error'] !== 0) {
        echo '文件上传错误,错误码:'.$file['error'];
        return false;
    }
    return true;
}

// 后缀
function upload_ext_vali($file){

    $path_info = pathinfo($file['name'], PATHINFO_EXTENSION);

    global $file_exts;
    if (!in_array($path_info, $file_exts)) {
        echo '文件后缀不通过';
        return false;
    }
    return true;
}

// 类型
function upload_type_vali($file){
    global $file_type;
    if (!in_array($file['type'], $file_type)) {
        echo '上传文件不支持';
        return false;
    }
    return true;
}

// 大小
function upload_size_limit($file){
    if ($file['size'] > FILE_SIZE_LIMIT) {
        echo '文件大小超过限制';
        return false;
    }
    return true;
}

// 保存文件
function upload_save($file, $is_abs = true){

    $temp_file = $file['tmp_name'];
    if (!file_exists(UPLOAD_DIR) &&
        !mkdir(UPLOAD_DIR, 0777, true)) {

        echo '文件不存在,且文件创建不成功';
        return false;
    }

    $extension = pathinfo($file['name'], PATHINFO_EXTENSION);
	$relatively= uniqid().'.'.$extension;
    $save_path = rtrim(UPLOAD_DIR,'/').'/'.$relatively;
    if (!move_uploaded_file($temp_file, $save_path)) {
        echo '文件保存失败';
        return false;
    }
	
	// 获取绝对路径
	if ($is_abs) {
		return $save_path;
	}
	// 获取相对路径
    return $relatively;
}